package com.atguigu.lease.web.admin.service.impl;

import com.atguigu.lease.model.entity.SystemUser;
import com.atguigu.lease.model.enums.BaseStatus;
import com.atguigu.lease.web.admin.mapper.SystemUserMapper;
import com.atguigu.lease.web.admin.service.SystemUserService;
import com.atguigu.lease.web.admin.vo.system.user.SystemUserItemVo;
import com.atguigu.lease.web.admin.vo.system.user.SystemUserQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

/**
 * @author liubo
 * @description 针对表【system_user(员工信息表)】的数据库操作Service实现
 * @createDate 2023-07-24 15:48:00
 */
@Service
public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemUser> implements SystemUserService {
    @Autowired
    private SystemUserMapper systemUserMapper;

    @Override
    public IPage<SystemUserItemVo> pageCustom(Page<SystemUserItemVo> page, SystemUserQueryVo queryVo) {
        // 调用自定义mapper方法进行分页查询
        // 思路：联表查询用户信息和岗位信息，返回带岗位名称的用户列表
        return systemUserMapper.pageCustom(page, queryVo);
    }

    @Override
    public SystemUserItemVo getByIdCustom(Long id) {
        // 调用自定义mapper方法获取用户详情（包含岗位名称）
        // 思路：根据ID查询用户，并关联查询岗位信息
        return systemUserMapper.getByIdWithPostName(id);
    }

    @Override
    @Transactional
    public boolean saveOrUpdateCustom(SystemUser systemUser) {
        // 如果是新增用户且密码不为空，对密码进行MD5加密
        if (systemUser.getId() == null && StringUtils.hasText(systemUser.getPassword())) {
            //新增用户
            String encryptedPassword = DigestUtils.md5DigestAsHex(systemUser.getPassword().getBytes());
            systemUser.setPassword(encryptedPassword);
        } else if (systemUser.getId() != null) {
            // 修改用户信息时，如果密码为空，则不修改密码
            if (StringUtils.hasText(systemUser.getPassword())) {
                // 有密码，则加密后再保存
                String encryptedPassword = DigestUtils.md5DigestAsHex(systemUser.getPassword().getBytes());
                systemUser.setPassword(encryptedPassword);
                //systemUser.setPassword(systemUser.getPassword());
            } else {
                systemUser.setPassword(null);
            }
        }
        // 保存或更新用户信息
        return saveOrUpdate(systemUser);
    }

    @Override
    public boolean isUsernameExists(String username) {
        // 检查用户名是否已存在
        // 思路：计数查询用户名，存在返回true
        LambdaQueryWrapper<SystemUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SystemUser::getUsername, username);
        queryWrapper.eq(SystemUser::getIsDeleted, 0); // 查询未删除的记录
        return count(queryWrapper) > 0;
    }

    @Override
    @Transactional
    public boolean removeByIdCustom(Long id) {
        // 逻辑删除用户信息（设置is_deleted=1）
        // 思路：使用MyBatis-Plus的逻辑删除功能
        return removeById(id);
    }

    @Override
    public boolean updateStatusByUserId(Long id, BaseStatus status) {
        // 更新用户状态
        // 思路：根据ID更新status字段
        SystemUser systemUser = new SystemUser();
        systemUser.setId(id);
        systemUser.setStatus(status);
        return updateById(systemUser);
    }

}




